<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        console.log(1);

        setInterval(function(){
            console.log(3);
        },1000);

        console.log(2);
        //js是单线程，虽然是单线程，现在也可以创建多个任务

        //同步，前一个任务结束后再执行后一个任务。
        //异步：在做一件事的时候可以同时做其他任务。

        //同步任务：放到主线程上执行，形成一个执行栈
         //异步任务：js通过回调函数实现 异步任务相关回调函数添加到任务队列中（任务队列也称为消息队列）
         /*异步任务有一下三种类型
            1.普通事件，如click resize
            2.资源加载，如load  error
            3.定时器，包括setInterval  setTimeout等*/

        //js执行机制：先执行同步任务（执行栈中的同步任务） ，遇到回调函数将回调函数放到消息队列中
        //当同步任务执行完了后，在执行消息队列中的任务
        //事件循环机制： 由于主线程不断地重复获得任务、执行任务、再获取任务、在执行。
    </script>
</body>
</html>